#include "str.h"

String :: String () {
    cadena = new char [1];
    cadena[0] = '\0';
}

String :: String (char * cad) {
    int largo = strlen(cad); // cantidad de caracteres de la cadena
    cadena = new char [largo + 1]; // un lugar mas para el ‘\0’.
    strcpy (cadena, cad); // se copian los caracteres de la cadena
}

String :: String (const String &otro) {
    int largo = strlen(otro.cadena); // cantidad de caracteres de la cadena
    cadena = new char [largo + 1]; // un lugar mas para el ‘\0’.
    strcpy (cadena, otro.cadena); // se copian los caracteres de la cadena
}

String :: ~String() {
    delete [] cadena;
}

String String :: operator= (const String &otro) {
    if (this != &otro) {
        delete [] cadena;
        int largo = strlen(otro.cadena);
        cadena = new char [largo + 1];
        strcpy (cadena, otro.cadena);
    }
    return (*this);
}

bool String::operator==(String otro){
    return strcmp(cadena,otro.cadena)==0;
}

bool String::operator<(String otro){
    return strcmp(cadena,otro.cadena)<0;
}

String String::operator+(String otro){  //Precondicion: el largo la concatenada (resultante) es menor que el maximo de caracteres
    String aux;
    int largo= strlen(cadena) + strlen(otro.cadena) + 1;
    aux.cadena=new char[largo];
    strcpy(aux.cadena,(*this).cadena);
    strcat(aux.cadena,otro.cadena);
    return aux;
}

void String::scan(){
    String auxStr;
    auxStr.cadena = new char[MAX];
    char auxChar;
    int i = 0;
    cin.get(auxChar);
    while ((auxChar != '\n') && i<MAX -1){
        auxStr.cadena[i] = auxChar;
        i++;
        cin.get(auxChar);
    }
    auxStr.cadena[i] = '\0';
    (*this) = auxStr;
}

void String::print(){
    cout << cadena;
}

int String :: getMax(){
    return MAX;
}

int String :: strlar(){
    return strlen(cadena);
}
